﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////


#pragma once

#include "GcmpModel.h"

namespace gcmp
{
    class IDocument;
}

/// \brief 连接关系修改器
class GCMP_MODEL_EXPORT IModifyJoinRelationship
{
public:
    /// \brief 获取全局连接关系修改器
    /// \return 返回全局连接关系修改器
    static const IModifyJoinRelationship* GetModifyJoinRelationship();

    /// \brief 设置全局连接关系修改器
    /// \param pModifyJoinRelationship 连接关系修改器
    static void SetModifyJoinRelationship(gcmp::OwnerPtr<IModifyJoinRelationship> pModifyJoinRelationship);

    /// \brief 虚拟析构函数
    virtual ~IModifyJoinRelationship() {}

    /// \brief 移动图元重新构建连接关系
    /// \param pDoc 文档对象
    /// \param moveElementId 被移动的图元Id
    virtual void BuildJoinInMoveElements(gcmp::IDocument* pDoc, const gcmp::ElementId& moveElementId) const = 0;

    /// \brief 移动夹点重新构建连接关系
    /// \param pDoc 文档对象
    /// \param moveElementId 被移动的夹点Id
    virtual void BuildJoinInMoveGripPoints(gcmp::IDocument* pDoc, const gcmp::ElementId& moveElementId) const = 0;

    /// \brief Element 移动图元或者夹点删除连接关系
    /// \param pDoc 文档对象
    /// \param moveElementId 被移动的图元或者夹点Id
    virtual void DeleteMoveElementJoins(gcmp::IDocument* pDoc, const gcmp::ElementId& moveElementId) const = 0;
};






